package org.example.study.liaoxuefeng;


import org.testng.annotations.Test;

/**
 * @author: 默苍璃
 * @date: 2023-05-22 12:54
 * <p>
 * 创建新线程
 */
public class CreatThread {

    public static void main(String[] args) {
        Thread t = new Thread();
        // 启动新线程
        t.start();
    }


    /**
     * 方法一：从Thread派生一个自定义类，然后覆写run()方法：
     */
    class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("start new thread!");
        }
    }

    @Test
    public void test1() {
        Thread t = new MyThread();
        // 启动新线程
        t.start();
    }


    /**
     * 方法二：创建Thread实例时，传入一个Runnable实例：
     */
    class MyRunnable implements Runnable {
        @Override
        public void run() {
            System.out.println("start new thread! Runnable");
        }
    }

    @Test
    public void test2() {
        Thread t = new Thread(new MyRunnable());
        // 启动新线程
        t.start();
    }


    /**
     * 用Java8引入的lambda语法进一步简写为：
     */
    @Test
    public void test3() {
        Thread t = new Thread(() -> {
            System.out.println("start new thread! lambda");
        });
        t.start(); // 启动新线程
    }


    /**
     * 使用线程执行的打印语句，和直接在main()方法执行的区别
     */
    @Test
    public void test4() throws InterruptedException {
        System.out.println("main start...");

        //匿名类内部类
        Thread t = new Thread() {
            public void run() {
                System.out.println("thread run...");
                System.out.println("thread end.");
            }
        };
        t.start();

        Thread.sleep(10);
        System.out.println("main end...");
    }


}
